package com.chen.base.module.mybatis.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
* <p>
* 通用性 Mapper 接口
* </p>
* TODO 注：存在sql注入的风险
* @author ChenJinLong
* @since 2024-07-18 09:59:00
*/
public interface CommonMapper extends BaseMapper {

    /**
     * 计数
     * @param sql sql
     * @return 计数
     */
    @Select("${sql}")
    Integer getCount(@Param("sql") String sql);

    /**
     * 根据sql获取一条数据
     * @param sql sql
     * @return 一条数据
     */
    @Select("${sql}")
    Map<String, Object> getOne(@Param("sql") String sql);

    /**
     * 根据sql获取一个数据
     * @param sql sql
     * @return 一个数据
     */
    @Select("${sql}")
    String getOneBy(@Param("sql") String sql);

    /**
     * 根据sql获取多条数据
     * @param sql sql
     * @return 多条数据
     */
    @Select("${sql}")
    List<Map<String, Object>> getList(@Param("sql") String sql);

    /**
     * 根据sql获取多条数据
     * @param sql sql
     * @return 多条数据
     */
    @Select("${sql}")
    List<String> getSinColumnList(@Param("sql") String sql);

    /**
     * 根据sql获取分页数据
     * @param page 分页参数page
     * @param sql sql
     * @return 分页数据
     */
    @Select("${sql}")
    Page<Map<String, Object>> getPage(@Param("page") Page<Map<String, Object>> page,
                                      @Param("sql") String sql);

}
